<?php
/**
 * Zead
 *
 * LICENSE	
 *
 * This source file is subject to the new BSD license that is bundled
 * with this package in the file LICENSE.txt.
 * It is also available through the world-wide-web at this URL:
 * http://www.opensource.org/licenses/bsd-license.php
 * If you did not receive a copy of the license and are unable to
 * obtain it through the world-wide-web, please send an email
 * to eu@marcelomx.com so we can send you a copy immediately.
 *
 * @category   Zead
 * @author     Marcelo Rodrigues Gonzaga <eu@marcelomx.com>
 * @copyright  Copyright (c) 2008 Marcelo Rodrigues Gonzaga
 * @link       http://code.google.com/p/zead 
 * @license    http://www.opensource.org/licenses/bsd-license.php     New BSD License
 *
 **/


/** @see Zead_Html_Filter_Abstract **/
require_once 'Zead/Html/Filter/Abstract.php';

/**
 * @category   Zead
 * @package    Zead_Html
 * @subpackage Zead_Html_Filter
 * @copyright  Copyright (c) 2008 Marcelo Rodrigues Gonzaga 
 * @license    http://www.opensource.org/licenses/bsd-license.php     New BSD License  
 */
class Zead_Html_Filter_TableContents extends Zead_Html_Filter_Abstract
{
	/**
	 * Aplica o filtro que tem a função de procurar elementos com o id siteName ou outro
	 * passado como argumento que será o título do site.
	 * @param string $value O título do site
	 * @param string $id O id do elemento a ser alterado.
	 */
	public function filter($tocList = array()) 
	{
		foreach ($this->html->documentElement->select("code.toc") as $code) {
			$maxLevel = $code->getAttribute('max-level');
			$block = $this->html->createElement('div');
			$code->parentNode->replaceChild($block, $code);
			$this->appendList($block, $tocList, $maxLevel);
		}
	}
	
	/**
	 * Creates the list/sublist to block from a table list
	 *
	 * @param DOMNode $block
	 * @param array   $tocList
	 * @param int     $maxLevel
	 * @param int     $tocLevel
	 * @return void
	 */
	protected function appendList($block, $tocList, $maxLevel = 3, $tocLevel = 0) 
	{
		$dl = $block->appendChild($this->html->createElement('dl'));
		
		if ($tocLevel == 0) {
			$dl->addClassName('toc');
			$sectionClassName = 'chapter';
		} else {
			$sectionClassName = 'section';
		}
		foreach ($tocList as $tocEntry) {
			$dt = $dl->appendChild($this->html->createElement('dt'));
			$dt->addClassName($sectionClassName);
			$a = $dt->appendChild($this->html->createElement('a'));
			$a->setAttribute('href', $tocEntry->url);
			$a->nodeValue = $tocEntry->title;
			
			if ($tocEntry->tocList->count()) {
				$dd = $dl->appendChild($this->html->createElement('dd'));
				$this->appendList($dd, $tocEntry->tocList, $maxLevel, ($tocLevel + 1));
			}
		}
	}
}

